package br.edu.unirn.dao;

import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;

import br.edu.unirn.dominio.Cliente;
import br.edu.unirn.dominio.Produto;
import br.edu.unirn.dominio.Venda;

public class VendaDAO extends GenericDAO<Venda>{

	@Override
	public Class<Venda> getClassType() {
		return Venda.class;
	}
	
	
	@SuppressWarnings("unchecked")
	public List<Venda> findVendasByPeriodo(Date inicio, Date fim) {
		String sql = "select v.datavenda, c.nome, sum(p.preco*i.quantidade) as valor from venda v " +
				"join cliente c on c.id = v.cliente_id " +
				"join itemvenda i on i.venda_id = v.id " +
				"join produto p on p.id = i.produto_id " +
				"where :inicio <= datavenda and datavenda <= :fim " +
				" group by 1,2	order by 1";
		
		Session session = (Session) getEm().getDelegate();

		Query q = session.createSQLQuery(sql);
		
		q.setDate("inicio", inicio);
		q.setDate("fim", fim);
		
		List<Object[]> lista = q.list();
		List<Venda> vendas = new ArrayList<Venda>();
		Venda venda = null;
		for (Object[] object : lista) {
			venda = new Venda();
			venda.setDataVenda((Date)object[0]);
			Cliente c = new Cliente();
			c.setNome((String)object[1]);
			venda.setCliente(c);
			venda.setValorTotal((Double)object[2]);
			
			vendas.add(venda);
		}
		return vendas;
		
	}

}
